package saves.items;

import java.util.Arrays;
import saves.EntidadeNave;

public class Consumivel extends Item {
    private static final long serialVersionUID = 8749770683183018464L;
    
    private Efeito[] efeitos;
    private Condicao[] condicoes;

    private Consumivel() {}

    public Consumivel(String nome, String descricao, int icone, Efeito[] efeitos, Condicao[] condicoes) {
        super(nome, descricao, icone);
        this.efeitos = efeitos;
        this.condicoes = condicoes;
    }
    
    public void usar(EntidadeNave n) {
        for (int i = 0; i < efeitos.length; i++)
            n.addEfeito(efeitos[i]);
    }
    
    public boolean podeUsar(EntidadeNave n) {
        for (int i = 0; i < condicoes.length; i++)
            if (!condicoes[i].preenche(n))
                return false;
        return true;
    }
    
    @Override
    public boolean equals(Object o) {
        if (o instanceof Consumivel) {
            Consumivel c = (Consumivel) o;
            if (c.efeitos.length != this.efeitos.length || c.condicoes.length != this.condicoes.length)
                return false;
            
            Arrays.sort(efeitos);
            Arrays.sort(c.efeitos);
            for (int i = 0; i < efeitos.length; i++)
                if (!efeitos[i].equals(c.efeitos[i]))
                    return false;
            
            Arrays.sort(condicoes);
            Arrays.sort(c.condicoes);
            for (int i = 0; i < condicoes.length; i++)
                if (!condicoes[i].equals(c.condicoes[i]))
                    return false;
            
            return true;
        }
        return false;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 67 * hash + Arrays.deepHashCode(this.efeitos);
        hash = 67 * hash + Arrays.deepHashCode(this.condicoes);
        return hash;
    }
}
